package com.gxar.quick.ar.server.base.model.protocol.editor.web;

import com.gxar.common.utils.JacksonUtils;
import com.gxar.common.utils.StringUtils;
import com.gxar.quick.ar.server.base.common.enums.protocol.ArContentFillTypeEnum;
import com.gxar.quick.ar.server.base.common.enums.protocol.ArContentSubTypeEnum;
import com.gxar.quick.ar.server.base.common.enums.protocol.ArWebEditorContentTypeEnum;
import com.gxar.quick.ar.server.base.model.protocol.ArQuaternion;
import com.gxar.quick.ar.server.base.model.protocol.ArSizeModel;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * Web编辑器输出配置
 *
 * @author zxh
 * @version 1.0
 * @created 2024/01/02.
 */
@Slf4j
@Data
public class WebEditorArContentModel {

    private String uuid;

    /**
     * 主类型
     */
    private ArWebEditorContentTypeEnum type;

    /**
     * 子类型
     */
    private ArContentSubTypeEnum subType;

    /**
     * 填充方式
     */
    private ArContentFillTypeEnum fillType;

    /**
     * 资源链接
     */
    private String linkUrl;

    private Double width;

    private Double height;

    private Double depth;

    /**
     * 原始大小信息
     */
    private ArSizeModel originData;

    /**
     * 原始四元数
     */
    private ArQuaternion originQuaternion;

    /**
     * 实际四元数
     */
    private ArQuaternion quaternion;

    /**
     * 位置
     */
    private String position;

    private Double[] rotationData;

    /**
     * 旋转, 欧拉角, XYZ
     */
    private String rotation;

    /**
     * 缩放
     */
    private String scale;

    /**
     * 文本
     */
    private WebEditorArItemTextModel text;

    /**
     * 边框
     */
    private WebEditorArItemBorderModel border;

    /**
     * 动画配置
     */
    private WebEditorArItemAnimationModel animation;

    /**
     * 编辑器空间数据
     */
    private WebEditorArItemInterSpaceModel interspace;

    /**
     * 编辑器自定义信息
     */
    private Object customerData;


    public static List<WebEditorArContentModel> from(String inputConfig) {
        if (StringUtils.isEmpty(inputConfig) || !inputConfig.startsWith("[") || !inputConfig.endsWith("]")) {
            log.warn("build WebEditorArContentModel error! inputConfig: {}", inputConfig);
            return Collections.emptyList();
        }

        return JacksonUtils.parseList(inputConfig, WebEditorArContentModel.class);
    }

    public static List<WebEditorArContentModel> from(String... inputConfigs) {
        if (Objects.isNull(inputConfigs)) {
            log.warn("build WebEditorArContentModel error! inputConfig is null");
            return null;
        }
        return Arrays.stream(inputConfigs)
                .map(inputConfig -> JacksonUtils.parseObject(inputConfig, WebEditorArContentModel.class))
                .collect(Collectors.toList());
    }

}
